package com.itheima.edu.manager.controller;

import com.itheima.edu.manager.domain.Student;
import com.itheima.edu.manager.service.StudentService;

import java.util.Scanner;

public class StudentController {
    StudentService service = new StudentService();
    private Scanner sc = new Scanner(System.in);

    //二级学生菜单
    public void start() {
        while (true) {
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看学生");
            System.out.println("5 退出");
            int choice = sc.nextInt();

            switch (choice) {
                case 1:
                    //添加学生方法
                    addStudent();
                    break;
                case 2:
                    //删除学生方法
                    deleteStudent();
                    break;
                case 3:
                    //修改学生方法
                    updateStudent();
                    break;
                case 4:
                    //查看学生方法
                    findAllStudent();
                    break;
                case 5:
                    return;
            }
        }
    }

    //修改学生功能
    public void updateStudent() {
        //判断一下当前系统是否有数据,如果没有数据,直接给个提示return当前方法
        //指挥业务员把系统中的数据全部查到
        Student[] stus = service.findAllStudent();

        //有数据,就展示数据
        if (stus == null) {
            //没有数据,提示当前系统无数据,请添加后重试!
            System.out.println("当前系统无数据,请添加后重试!");
            return;
        }

        //键盘录入学生学号
        System.out.println("请输入学号:");
        String id = sc.next();
        //键盘录入学生信息
        Student newStu = inputStudentInfo(id);
        //调用业务员方法查看学生学号是否存在
        boolean exists = service.isExists(id);

      boolean result = service.updateStudent(id,newStu);

        if (exists) {
            System.out.println("您的数据有误,请重新输入");
        }
        if(result){
            System.out.println("修改成功!");
        }

    }

    //删除学生功能
    public void deleteStudent() {
        //键盘录入学生学号
        while (true) {
            System.out.println("请输入学号:");
            String id = sc.next();

            //调用业务员中的方法
            boolean result = service.deleteStudent(id);

            //判断是否删除成功
            if (result) {
                System.out.println("删除成功!");
                break;
            } else {
                System.out.println("您删除的数据不存在,请重新录入");
            }
        }
    }

    //查看学生功能
    public void findAllStudent() {
        //键盘录入学生学号
        System.out.println("请输入学号:");
        String id = sc.next();

        //调用业务员中的方法
        Student[] stu = service.findAllStudent();

        //判断数组中是否存在数据
        if (stu == null) {
            System.out.println("您查看的数据不存在,请重新输入:");
        } else {
            System.out.println("\t" + "学号" + "\t\t" + "姓名" + "\t" + "年龄" + "\t生日");
            for (int i = 0; i < stu.length; i++) {
                Student stus = stu[i];
                //输出当前学生信息
                if (stus != null) {
                    System.out.println(stus.getId() + "\t" + stus.getName() + "\t" + stus.getAge() + "\t\t" + stus.getBirthday());
                }
            }
        }
    }

    //添加学生功能
    public void addStudent() {
        //键盘录入学生信息
        System.out.println("请输入学号:");
        String id = sc.next();
        System.out.println("请输入姓名:");
        String name = sc.next();
        System.out.println("请输入年龄:");
        String age = sc.next();
        System.out.println("请输入出生日期:");
        String birthday = sc.next();

        //通过有参构造将学生信息封装成对象
        Student stu = new Student(id, name, age, birthday);

        //调用业务员类中的方法判断学生信息是否已经存在
        boolean result = service.addStudent(stu);

        //进行判断是否添加成功
        if (result) {
            System.out.println("添加成功!");
        } else {
            System.out.println("添加失败!");
        }
    }

    //抽取一个方法,用于键盘录入学生信息,封装学生对象并返回
    public Student inputStudentInfo(String id) {
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学生年龄:");
        String age = sc.next();
        System.out.println("请输入学生出生日期:");
        String birthday = sc.next();

        //2.将用户录入的学生信息封装成一个学生对象
        //优化点: 当前对象的创建优化成:  带参构造创建对象!
        //遵守开闭原则:  对扩展开放,对修改关闭.
        Student stu = new Student();
        stu.setId(id);
        stu.setName(name);
        stu.setAge(age);
        stu.setBirthday(birthday);

        //返回封装好的学生对象
        return stu;
    }
}
